from stark.service.v1 import StarkConfig, StarkModelForm
from .base import PermissionHandler
from ..models import CityArea
from django.forms import forms
from django.utils.translation import gettext_lazy as _


# 自定义模型表单，用于Excel导入验证
class CityAreaModelForm(StarkModelForm):
    class Meta:
        model = CityArea  # 替换为实际的模型类
        fields = ['city_name', 'area_name']  # 根据实际字段调整
    
    def clean(self):
        """可以添加自定义验证逻辑"""
        cleaned_data = super().clean()
        city_name = cleaned_data.get('city_name')
        area_name = cleaned_data.get('area_name')
        
        # 示例：验证城市和区域组合是否已存在
        if CityArea.objects.filter(city_name=city_name, area_name=area_name).exists():
            raise forms.ValidationError(_("该城市的区域已存在"))
        return cleaned_data


class CityAreaConfig(PermissionHandler, StarkConfig):

    # 使用自定义的表单进行数据验证
    excel_form_class = CityAreaModelForm
    import_excel_max_size = 5242880  # 5MB
    
    # 导出字段应与CityArea模型的实际字段对应
    def get_export_fields(self):
        return [
            'id', 'city_name', 'area_name'  # 修正为实际存在的字段
        ]
    
    # 列表页面显示的字段
    list_display = ["id", "city_name", "area_name"]
    
    # 可以添加导入成功后的自定义处理
    def save(self, request, form, is_update, *args, **kwargs):
        """保存数据时的钩子方法"""
        super().save(request, form, is_update, *args, **kwargs)
        # 可以添加额外的业务逻辑，如日志记录等
    
    # 如果需要自定义导入模板的说明
    def get_excel_template_description(self):
        """返回模板使用说明"""
        return _("""
        1. 请填写城市名称和区域名称<br>
        2. 城市名称和区域名称的组合不能重复<br>
        3. 不要修改表头名称
        """)